package com.mycat.dfs.server;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.FileInfo;

import java.io.InputStream;

/**
 * FastDFS文件系统接口
 *
 * @author roger.
 * @email 190642964@qq.com
 * @create 2017-02-06
 */
public interface FastDFSService {
	/**
	 * 上传文件
	 *
	 * @param file 文件的绝对地址
	 * @return 地址
	 */
	String uploadFile(String file) throws Exception;

	/**
	 * 通过字节数组上传文件
	 *
	 * @param b           字节数组
	 * @param fileExtName 文件扩展名
	 * @return 地址
	 */
	String uploadFileByByte(byte[] b, String fileExtName) throws Exception;

	/**
	 * 文件上传
	 *
	 * @param file     文件绝对地址
	 * @param metaList 可以放一些参数和该文件绑定
	 * @return 地址
	 */
	String uploadFile(String file, NameValuePair[] metaList) throws Exception;

	/**
	 * 通过字节流上传文件
	 *
	 * @param is          字节流
	 * @param fileExtName 文件扩展名
	 * @param metaList    键值对
	 * @return 地址
	 */
	String uploadFile(InputStream is, String fileExtName, NameValuePair[] metaList) throws Exception;

	/**
	 * 通过字节流上传文件
	 *
	 * @param is          字节流
	 * @param fileExtName 文件扩展名
	 * @return 地址
	 */
	String uploadFile(InputStream is, String fileExtName) throws Exception;

	/**
	 * 下载文件
	 *
	 * @param file 文件相对路径，如/group1/M00/00/00/CgAFDlbcJe6AMPNXAAvqH_kipG8840.jpg
	 * @return
	 */
	byte[] downloadFile(String file) throws Exception;

	/**
	 * 获取文件信息，如文件大小、文件创建时间等
	 *
	 * @param file 文件相对路径，如/group1/M00/00/00/CgAFDlbcJe6AMPNXAAvqH_kipG8840.jpg
	 * @return
	 */
	FileInfo getFileInfo(String file) throws Exception;

	/**
	 * 获取存放在该文件内的数据
	 *
	 * @param file 文件相对路径，如/group1/M00/00/00/CgAFDlbcJe6AMPNXAAvqH_kipG8840.jpg
	 * @return
	 */
	NameValuePair[] getFileMeteInfo(String file) throws Exception;

	/**
	 * 删除文件
	 *
	 * @param file 文件相对路径，如/group1/M00/00/00/CgAFDlbcJe6AMPNXAAvqH_kipG8840.jpg
	 * @return
	 */
	int deleteFile(String file) throws Exception;
}
